﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.IO;

namespace Cataloger.Kontrolki
{
    public class ListViewItemCataloger:ListViewItem
    {
		#region Constructors (6) 

        public ListViewItemCataloger(IObiektCatalogera Iob):this()
        {
            if (Iob is Katalog)
            {
                ItemKatalog(Iob as Katalog);
            }
            else if (Iob is Nosnik)
            {
                ItemNosnik(Iob as Nosnik);
            }
            else if (Iob is ArchiwumEntry)
            {
                ItemArchiwumEntry(Iob as ArchiwumEntry);  
            }
            else if (Iob is ObiektDyskowy)
            {
                ItemObiektDyskowy(Iob as ObiektDyskowy);
            }
        }

        public ListViewItemCataloger(Katalog kat)
            : this()
        {
            ItemKatalog(kat);
        }

        public ListViewItemCataloger(Nosnik nos)
            : this()
        {
            ItemNosnik(nos);
        }

        public ListViewItemCataloger(ArchiwumEntry ae):this()
        {
            ItemArchiwumEntry(ae);    

        }

        public ListViewItemCataloger(ObiektDyskowy od):this()
        {
            ItemObiektDyskowy(od);

        }

        public ListViewItemCataloger()
        {
        }

		#endregion Constructors 

		#region Methods (7) 

		// Private Methods (7) 

        private void ItemArchiwumEntry(ArchiwumEntry ae)
        {
            if (ae.CzyFolder)
            {
                this.ImageKey = "folder";
                this.ImageIndex = ListViewCataloger.il.ImageList.Images.IndexOfKey("folder");
            }
            else
            {
                ListViewCataloger.il.AddImage(ae.Rozszerzenie.ToLower(), new FileInfoManager().GetLargeFileTypeIcon(ae.Rozszerzenie).ToBitmap());
                this.ImageKey = ae.Rozszerzenie;
                this.ImageIndex = ListViewCataloger.il.ImageList.Images.IndexOfKey(this.ImageKey);
            }
            this.Tag = ae;
            this.Text = ae.NazwaBezSciezki;
            this.ToolTipText = ae.CalkowiteInfo;

            this.SubItems.Add(ae.Rozszerzenie);
            this.SubItems.Add(ae.Typ);

            this.SubItems.Add(ae.PlikArchiwumRodzic.Nosnik.Nazwa);
            this.SubItems.Add(ae.PlikArchiwumRodzic.KataloG.Nazwa);
            this.SubItems.Add(ae.RozmiarPrzed.ToProperUnit());
            this.SubItems.Add("");
            this.SubItems.Add("");
            this.SubItems.Add("");
            this.SubItems.Add(ae.DataModyfikacj.ToShortDateString());
            this.SubItems.Add(ae.DataModyfikacj.ToShortTimeString());
            this.SubItems.Add(ae.DataModyfikacj.DzienTygodnia().ToString());
            this.SubItems.Add("");
            this.SubItems.Add("");
            this.SubItems.Add("");
            this.SubItems.Add("");
            this.SubItems.Add("");

            this.SubItems.Add(ae.Sciezka);
        }

        private void ItemKatalog(Katalog kat)
        {
            kat.ZmianaNazwy += new EventHandler(kat_ZmianaNazwy);
            this.Tag = kat;
            this.ImageKey = "katalog";
            this.ImageIndex = ListViewCataloger.il.ImageList.Images.IndexOfKey("katalog");
            this.Text = kat.Nazwa;
            this.ToolTipText = kat.OpisToolTip;
            this.ForeColor = kat.Kolor;
            try
            {
                this.SubItems.Add(kat.nazwaZaladowana);
            }
            catch { this.SubItems.Add(""); }
            this.SubItems.Add(kat.DataAktualizacji.ToString());
            this.SubItems.Add(kat.DataUtworzenia.ToString());
            this.SubItems.Add(kat.IleFolderow.ToString("N0"));
            this.SubItems.Add(kat.IlePlikow.ToString("N0"));
            this.SubItems.Add(kat.JestHaslo.PolskaNazwa());
            this.SubItems.Add(kat.Kompresuj.PolskaNazwa());
            this.SubItems.Add(kat.LiczbaNosnikow.ToString());
            this.SubItems.Add(kat.RozmiarDanych.ToProperUnit());
        }

        private void ItemNosnik(Nosnik nos)
        {
            nos.ZmianaNazwy += new EventHandler(nos_ZmianaNazwy);
            this.Tag = nos;
            this.ImageKey = nos.Klucz;
            this.ImageIndex = ListViewCataloger.il.ImageList.Images.IndexOfKey(nos.Klucz);

            this.Text = nos.Nazwa;
            this.ToolTipText = nos.OpisToolTip;

            this.SubItems.Add(nos.Katalog.Nazwa);
            this.SubItems.Add(nos.CzyPodlaczony().PolskaNazwa());
            this.SubItems.Add(nos.DataAktulizacji.ToString());
            this.SubItems.Add(nos.DataDodania.ToString());
            this.SubItems.Add(nos.DyskFizyczny);
            this.SubItems.Add(nos.DriveFormat);
            this.SubItems.Add(nos.NrSeryjny);
            this.SubItems.Add(nos.RodzajDysku.ToString());
            this.SubItems.Add(nos.Status.ToString());
            this.SubItems.Add(nos.Wielkosc.ToProperUnit());
            this.SubItems.Add(nos.WolneMiejsce.ToProperUnit());
        }

        private void ItemObiektDyskowy(ObiektDyskowy od)
        {
            if (od is Plik)
            {

                Plik temp = od as Plik;
                temp.ZmianaKategori += new EventHandler(temp_ZmianaKategori);
                ListViewCataloger.il.AddImage(temp.Rozszerzenie.ToLower(), new FileInfoManager().GetLargeFileTypeIcon(temp.Rozszerzenie).ToBitmap());
                if (temp.Kategoria != null)
                {
                    this.ForeColor = temp.Kategoria.Kolor;
                }
                if (temp.CzyArchiwum)
                {
                    this.BackColor = Color.AliceBlue;
                }
                if (temp.Rozszerzenie == "")
                {
                    this.ImageKey = "?";
                    this.ImageIndex = ListViewCataloger.il.ImageList.Images.IndexOfKey(this.ImageKey);
                }
                else
                {
                    this.ImageKey = temp.Rozszerzenie;
                    this.ImageIndex = ListViewCataloger.il.ImageList.Images.IndexOfKey(this.ImageKey);
                }
                this.Text = Path.GetFileNameWithoutExtension(temp.Nazwa);

                this.Tag = temp;
                this.ToolTipText = temp.OpisToolTip;

                this.SubItems.Add(temp.Rozszerzenie);

                this.SubItems.Add(temp.Typ);

                this.SubItems.Add(temp.Nosnik.Nazwa);
                this.SubItems.Add(temp.KataloG.Nazwa);

                this.SubItems.Add(temp.Rozmiar.ToProperUnit());

                this.SubItems.Add(temp.DataUtw.ToShortDateString());
                this.SubItems.Add(temp.DataUtw.ToShortTimeString());
                this.SubItems.Add(temp.DataUtw.DzienTygodnia().ToString());

                this.SubItems.Add(temp.DataMod.ToShortDateString());
                this.SubItems.Add(temp.DataMod.ToShortTimeString());
                this.SubItems.Add(temp.DataMod.DzienTygodnia().ToString());

                this.SubItems.Add(temp.DataDost.ToShortDateString());
                this.SubItems.Add(temp.DataDost.ToShortTimeString());
                this.SubItems.Add(temp.DataDost.DzienTygodnia().ToString());

                this.SubItems.Add(temp.Atrybuty.ToString());
                if(temp.Kategoria!=null)
                {
                    this.SubItems.Add(temp.Kategoria.Nazwa);
                }
                else
                { this.SubItems.Add(""); }
                this.SubItems.Add(temp.Sciezka);

            }
            else if (od is Folder)
            {

                Folder temp = (Folder)od;
                this.ImageKey = "folder";
                this.ImageIndex = ListViewCataloger.il.ImageList.Images.IndexOfKey("folder");

                this.Tag = temp;
                this.Text = temp.Nazwa;
                this.ToolTipText = temp.OpisToolTip;

                this.SubItems.Add("");
                this.SubItems.Add(temp.Typ);

                this.SubItems.Add(temp.Nosnik.Nazwa);
                this.SubItems.Add(temp.KataloG.Nazwa);

                this.SubItems.Add(temp.Rozmiar.ToProperUnit());

                this.SubItems.Add(temp.DataUtw.ToShortDateString());
                this.SubItems.Add(temp.DataUtw.ToShortTimeString());
                this.SubItems.Add(temp.DataUtw.DzienTygodnia().ToString());

                this.SubItems.Add(temp.DataMod.ToShortDateString());
                this.SubItems.Add(temp.DataMod.ToShortTimeString());
                this.SubItems.Add(temp.DataMod.DzienTygodnia().ToString());

                this.SubItems.Add(temp.DataDost.ToShortDateString());
                this.SubItems.Add(temp.DataDost.ToShortTimeString());
                this.SubItems.Add(temp.DataDost.DzienTygodnia().ToString());

                this.SubItems.Add(temp.Atrybuty.ToString());
                this.SubItems.Add("");
                this.SubItems.Add(temp.Sciezka);
            }
        }

        void kat_ZmianaNazwy(object sender, EventArgs e)
        {
            this.Text = (sender as Katalog).Nazwa;
        }

        void nos_ZmianaNazwy(object sender, EventArgs e)
        {
            this.Text = (sender as Nosnik).Nazwa;
        }

        void temp_ZmianaKategori(object sender, EventArgs e)
        {
            this.ForeColor = (sender as Plik).Kategoria.Kolor;
        }

		#endregion Methods 
    }
}
